/**
 * Array
 * 
 */

// 显式创建
let arr = new Array();
arr[0] = 1;
arr[1] = 2;

// 通过构造函数
let arr1 = new Array(1, 2);

// 字面量创建
let arr2 = [1, 2];

// 传入一个数值
let arr3 = new Array(3);

// 省略new操作符
let arr4 = Array(2);
let arr5 = Array('ab', 'cd');

/**
 * from()和of()
 * from()用于将类数组结构转换为数组实例，而 of()用于将一组参数转换为数组实例。
 */
// 字符串会被拆分为单字符数组
console.log(Array.from("Matt")); // ["M", "a", "t", "t"]
console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4]
console.log(Array.of(undefined)); // [undefined]


/**
 * 实现flatten()
 * 三种方法
 */
let arr6 = [1, [2, [3, [4, 5], 6], 7], 8, 9];
const flatten = (arr) => {
    return arr.reduce((acc, cur) => {
        if (Array.isArray(cur)) {
            return acc.concat(flatten(cur));
        } else {
            return acc.concat(cur);
        }
    }, []);
};
const flatten2 = (arr) => {
    while(arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr);

    }
    return arr;
}
const flatten3 = (arr) => {
    return [].concat(...arr.map(v => Array.isArray(v) ? flatten3(v) : v));
}

/**
 * 数组随机排序
 */

